El dispositivo permite detectar cuando una luz o un sonido superan un umbral ajustable en el interior de la caja.
Utiliza un arduino Pro mini, dos sensores una de luz y otro de sonido y un display de siete segmentos y cuatro dígitos.
El programa para arduino es:
// Este programa para controlar el disparador de una cámara // Activado por sonido, o Luz // Autor:Miguel Prohens // Fecha: 6/11/2018 // Elementos externos: // 1.- led conectado al pin 13 // 2.- Sensor de luz y sonido conectados al pin 8 // 5.- 2 pulsadores pin 4, 5 modifican retardo // 6.- 1 pulsador pin 6 modifica brillo display // 7.- Optorelé en el pin 12 // 8.- Led de detección pin 11
#include <Arduino.h> #include <TM1637Display.h>
// Module connection pins (Digital Pins) #define CLK 2 #define DIO 3
// 1- Declaraciones globales #define RETRASO 1000 #define DISPLAY 6 // Botón para cambiar el brillo del display #define SUBE 4 //Boton para subir el retraso #define BAJA 5 // Botón para bajar el retraso
TM1637Display display(CLK, DIO);
const int OPTO=12; const int DETECCION=11; const int SENSOR=8; unsigned long momentoPulsacion = 0; int retraso=0; // controla el retardo antes del disparo int brillo=0; // controla el brillo del display int displayon; // 0 para display apagado 1 para encendido
// 2- Setup void setup() { int k; pinMode(OPTO, OUTPUT); pinMode(DETECCION, OUTPUT); pinMode(SENSOR, INPUT); pinMode(DISPLAY, INPUT_PULLUP); pinMode(SUBE, INPUT_PULLUP); pinMode(BAJA, INPUT_PULLUP);
digitalWrite(OPTO, LOW); retraso=0; // variables a cero brillo=0; displayon=0; display.setBrightness(0x00); // Brillo a bajo }
void loop() { int k; uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
// Botón para aumentar el retardo del disparo if(retraso < 3000 && digitalRead(SUBE) == LOW) { retraso=retraso+50; displayon=1; enciendedisplay(); }
// Botón para reducir el retardo del disparo if(retraso > 49 && digitalRead(BAJA) == LOW) { retraso=retraso-50; enciendedisplay(); }
// Boton BRILLO para el display if (digitalRead(DISPLAY) == LOW) { brillo=brillo+1; if (brillo==3){brillo=0;} // Si llegamos al valor brillo 4 pasamos a 0 display.setBrightness((brillo)*2, true); display.showNumberDec(retraso, false); // Refresca el display delay(250); // para que espere una nueva pulsación del botón displayon=1; momentoPulsacion = millis(); // empezamos a contar desde cero el tiempo en ms }
// Enciende el led de detección y temporización if (digitalRead(SENSOR)==LOW) //Lectura y acción del sensor { // Pasados 1,6 seg fr pulsar un botón el SENSOR empieza a leer datos if ((millis() – momentoPulsacion) > 1600) //Lectura y acción del sensor { digitalWrite(DETECCION, HIGH); delay(retraso); digitalWrite(OPTO, HIGH); delay(100); //se pulsa el botón de la cámara 100 ms digitalWrite(OPTO, LOW); digitalWrite(DETECCION, LOW); delay(500); // Si el objeto rebota y hace otros sonidos 1/2 seg de no detección } }
// Apagar el display pasados 1,4 seg de pulsar teclas if (displayon==1 && (millis() – momentoPulsacion) > 1400) { displayon=0; //Indicamos que hasta nueva pulsacion display apagado display.setBrightness(0, false); // apaga el display display.showNumberDec(retraso, false); // Escribo el valor de retraso } }
// SUBRUTINAS // Cambia numero en el display void enciendedisplay(){ displayon=1; momentoPulsacion = millis(); // empezamos a contar desde cero el tiempo en ms display.setBrightness(brillo*2, true); //Enciendo el display display.showNumberDec(retraso, false); //Enseñamos valor de retraso if (retraso<1050){delay(250);} else{delay(100);} // Contador lento hasta 100 y ràpido hasta 3 seg }
|